﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CapaDeNegocio;
using CapaDeDominio;

namespace Studio7iMVC2.Controllers
{
    public class InstrumentoController : Controller
    {

        #region Dependencias que se inyectan con Spring.NET
       IAdministracionService AdminService { get; set; }
        #endregion 

        public ActionResult Index()
        {
            ICollection<Instrumento> modelo = AdminService.ListarInstrumentos();
            return View(modelo);
        }    
          
        [HttpPost]
        public ActionResult Creacion(FormCollection formulario) // Recibe el formulario de Creacion.aspx
        {
            int Tipo = int.Parse(formulario["Tipo"]);
            string Marca = (string)formulario["Marca"];
            string Modelo = (string)formulario["Modelo"];
            int  AnioFabricacion = int.Parse(formulario["AnioFabricacion"]);
            decimal  Alquiler = decimal.Parse(formulario["Alquiler"]);
            string Caracteristicas = (string)formulario["Caracteristicas"];
                
            Instrumento instrumentoCreado=null;
            // Coordinamos con el negocio para la funcionalidad
            try
            {
                
                instrumentoCreado= AdminService.RegistrarInstrumento(Tipo, Marca, Modelo, Caracteristicas, AnioFabricacion, Alquiler );
                TempData["mensaje"] = "Instrumento " + instrumentoCreado.Codigo + " creado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Creacion", instrumentoCreado); // Problemas! De nuevo a Creacion.aspx
            }
        }

        public ActionResult Modificacion(int Codigo) // Genera la vista Views/Local/Modificacion.aspx
        {
            return View(AdminService.ObtenerInstrumento(Codigo));
        }
        [HttpPost]
        public ActionResult Modificar(FormCollection formulario) // Recibe el formulario de Modificacion.aspx
        {
            Instrumento instrumentoAModificar = new Instrumento()
            {
                Codigo = int.Parse(formulario["Codigo"]),
                Marca = (string)formulario["Marca"],
                Modelo = (string)formulario["Modelo"],
                AnioFabricacion = int.Parse(formulario["AnioFabricacion"]),
                Alquiler = decimal.Parse(formulario["Alquiler"]),
                Caracteristicas = (string)formulario["Caracteristicas"]

            };
            try 
            { 
                Instrumento instrumentoModificado = AdminService.ModificarInstrumento(instrumentoAModificar);
                TempData["mensaje"] = "Instrumento" + instrumentoModificado.Codigo + " modificado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch (Exception ex)
            {
                
                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Modificacion", instrumentoAModificar); // Problemas! De nuevo a Modificacion.aspx
            }
        }

        //
        // GET: /Instrumento/Delete/5

        [HttpPost]
        public ActionResult Eliminar(int Codigo) // Recibe el formulario de Eliminacion.aspx
        {
            try
            {
                Instrumento instrumentoAEliminar = AdminService.ObtenerInstrumento(Codigo);
                AdminService.EliminarInstrumento(instrumentoAEliminar);
                TempData["mensaje"] = "Instrumento" + instrumentoAEliminar.Codigo + " eliminado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch (Exception ex)
            {

                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Eliminacion", AdminService.ObtenerInstrumento(Codigo)); // Problemas! De nuevo a Eliminacion.aspx
            }
        } 
        
    }
}
